home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / rebelssource.lha / Sources / PHOTO.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-07-09  |  5.6 KB  |  231 lines

  1.  
  2. (* Nice Photo Routine done by Zulu & Grey of Rebels *)
  3.  
  4. PROGRAM definition_der_objekte_und_organisation;
  5.  
  6.   USES graph,crt;
  7.  
  8.   TYPE punkt      = OBJECT
  9.                       x,
  10.                       y    : REAL;
  11.  
  12.                       CONSTRUCTOR init(xwert,ywert : REAL);
  13.                       procedure out(VAR xwert,ywert : REAL);
  14.                       procedure zeigen; virtual;
  15.                       procedure loeschen; virtual;
  16.                       procedure addition(dx,dy : REAL); virtual;
  17.  
  18.                       procedure verschieben(dx,dy : REAL); virtual;
  19.                     END;
  20.  
  21.        linie      = OBJECT(punkt)
  22.                       x1,
  23.                       y1   : REAL;
  24.  
  25.                       CONSTRUCTOR init(xwert,ywert,x1wert,y1wert : REAL);
  26.                       procedure out(VAR xwert,ywert,x1wert,y1wert : REAL);
  27.                       procedure zeigen; virtual;
  28.                       procedure addition(dx,dy : REAL); virtual;
  29.  
  30.                       {Prozedur VERSCHIEBEN wurde geerbt!}
  31.                     END;
  32.  
  33.        kreis      = OBJECT(punkt)
  34.                       radius : REAL;
  35.  
  36.                       CONSTRUCTOR init(xwert,ywert,rad : REAL);
  37.                       procedure out(VAR xwert,ywert,rad : REAL);
  38.                       procedure zeigen; virtual;
  39.  
  40.                       {Prozeduren ADDITION und VERSCHIEBEN von "punkt" geerbt!}
  41.                     END;
  42.  
  43.        rechteck   = OBJECT(linie)
  44.                       procedure zeigen; virtual;
  45.  
  46.                       {Restprozeduren von "linie" geerbt!}
  47.                     END;
  48.  
  49. {------------------------------Objekt Punkt----------------------------------}
  50.  
  51.   CONSTRUCTOR punkt.init(xwert,ywert : REAL);
  52.  
  53.     BEGIN
  54.       x := xwert;
  55.       y := ywert;
  56.     END;
  57.  
  58.   PROCEDURE punkt.out(VAR xwert,ywert : REAL);
  59.  
  60.     BEGIN
  61.       xwert := x;
  62.       ywert := y;
  63.     END;
  64.  
  65.   PROCEDURE punkt.zeigen;
  66.  
  67.     BEGIN
  68.       putpixel(round(x),round(y),getcolor);
  69.                 {Pixel an der Stelle (x,y) mit akt.Zeichenfarbe}
  70.     END;
  71.  
  72.   PROCEDURE punkt.loeschen;
  73.  
  74.     VAR altfarbe : WORD;
  75.  
  76.     BEGIN
  77.       altfarbe := getcolor;
  78.       setcolor(getbkcolor);
  79.       zeigen;
  80.       setcolor(altfarbe);
  81.     END;
  82.  
  83.   PROCEDURE punkt.addition(dx,dy : REAL);
  84.  
  85.     BEGIN
  86.       x := x + dx;
  87.       y := y + dy;
  88.     END;
  89.  
  90.   PROCEDURE punkt.verschieben(dx,dy : REAL);
  91.  
  92.     BEGIN
  93.       loeschen;
  94.       addition(dx,dy);
  95.       zeigen;
  96.     END;
  97.  
  98. {-------------------------------Objekt Linie---------------------------------}
  99.  
  100.   CONSTRUCTOR linie.init(xwert,ywert,x1wert,y1wert : REAL);
  101.  
  102.     BEGIN
  103.       x := xwert;
  104.       y := ywert;
  105.       x1 := x1wert;
  106.       y1 := y1wert;
  107.     END;
  108.  
  109.   PROCEDURE linie.out(VAR xwert,ywert,x1wert,y1wert : REAL);
  110.  
  111.     BEGIN
  112.       xwert := x;
  113.       ywert := y;
  114.       x1wert := x1;
  115.       y1wert := y1;
  116.     END;
  117.  
  118.   PROCEDURE linie.zeigen;
  119.  
  120.     BEGIN
  121.       line(round(x),round(y),round(x1),round(y1));
  122.     END;
  123.  
  124.   PROCEDURE linie.addition;
  125.  
  126.     BEGIN
  127.       x := x + dx;
  128.       y := y + dy;
  129.       x1 := x1 + dx;
  130.       y1 := y1 + dy;
  131.     END;
  132.  
  133. {------------------------------Objekt Kreis----------------------------------}
  134.  
  135.   CONSTRUCTOR kreis.init(xwert,ywert,rad : REAL);
  136.  
  137.     BEGIN
  138.       x := xwert;
  139.       y := ywert;
  140.       radius := rad;
  141.     END;
  142.  
  143.   PROCEDURE kreis.out(VAR xwert,ywert,rad : REAL);
  144.  
  145.     BEGIN
  146.       xwert := x;
  147.       ywert := y;
  148.       rad := radius;
  149.     END;
  150.  
  151.   PROCEDURE kreis.zeigen;
  152.  
  153.     BEGIN
  154.       circle(round(x),round(y),round(radius));
  155.     END;
  156.  
  157. {-------------------------------Objekt Rechteck 1----------------------------}
  158.  
  159.   PROCEDURE rechteck.zeigen;
  160.  
  161.     BEGIN
  162.       rectangle(round(x),round(y),round(x1),round(y1));
  163.     END;
  164.  
  165. {--------------------------------Hauptprogramm-------------------------------}
  166.  
  167. { Ab hier stehen alle Verschiebungsprozeduren fr die vordefinierten Objekte }
  168. { zur Verfgung!                                                             }
  169.  
  170.   VAR
  171.     graphdriver,
  172.     graphmode,
  173.     dx,
  174.     realdx,
  175.     realdy,
  176.     dy            : INTEGER;
  177.     ch,ch1        : CHAR;
  178.     opunkt        : punkt;
  179.     olinie        : linie;
  180.     orechteck     : rechteck;
  181.     okreis        : kreis;
  182.  
  183.   BEGIN
  184.  
  185.     { Anzeigeobjekte vordefinieren }
  186.     okreis.init(175,140,30);
  187.     orechteck.init(100,100,250,180);
  188.     opunkt.init(175,140);
  189.     olinie.init(110,110,150,110);
  190.  
  191.     { Eingeben der Dx und Dy Werte }
  192.  
  193.     write('Bitte geben Sie den Y Verschiebewert ein: ');readln(realdy);
  194.     write('Bitte geben Sie den X Verschiebewert ein: ');readln(realdx);
  195.  
  196.     { Grafikmodus einschalten }
  197.     graphdriver := detect;
  198.     initgraph(graphdriver,graphmode,'c:\tp\bgi');
  199.  
  200.     { Objekte darstellen }
  201.     okreis.zeigen;
  202.     orechteck.zeigen;
  203.     olinie.zeigen;
  204.     opunkt.zeigen;
  205.  
  206.     { Arbeitsschleife }
  207.     repeat
  208.       ch := readkey;
  209.       case ch of
  210.         #0  : BEGIN
  211.                 ch1 := readkey;
  212.                 dx := 0;
  213.                 dy := 0;
  214.                 case ch1 of
  215.                   #72 : dy := -realdy; { Cursor auf    }
  216.                   #80 : dy :=  realdy; { Cursor ab     }
  217.                   #75 : dx := -realdx; { Cursor links  }
  218.                   #77 : dx :=  realdx; { Cursor rechts }
  219.                   else ;
  220.                 END;
  221.                 opunkt.verschieben(dx,dy);
  222.                 olinie.verschieben(dx,dy);
  223.                 okreis.verschieben(dx,dy);
  224.                 orechteck.verschieben(dx,dy);
  225.               END;
  226.         #13 : ;
  227.       END;
  228.     UNTIL ch=#13; { abbrechen, wenn RETURN gedrckt wurde }
  229.     closegraph;  { zurckkehren zum Text-Modus }
  230.   END.
  231.